//#include <iostream>
//#include <vector>
//#include <algorithm>
//using namespace std;
//int A[100005];
//int B[100005];
//int main()
//{
//	std::ios::sync_with_stdio(false);
//	std::cin.tie(nullptr);
//	std::cout.tie(nullptr);
//	int n;  cin >> n;
//	int l = n / 2, q = n - l;
//	vector<vector<int>> window(n, vector<int>(2));
//	for (int i = 0; i < n; i++) {
//		cin >> A[i] >> B[i];
//		window[i][0] = A[i] - B[i];
//		window[i][1] = i;
//	}
//	//for (int i = 0; i < n; i++) {
//	//	window[i][0] = A[i] - B[i];
//	//	window[i][1] = i;
//	//}
//	sort(window.begin(), window.end());
//	//for (int i = 0; i < n; i++) {
//	//	cout << window[i][0] << ' ' << window[i][1] << endl;
//	//}
//	int ans = 0;
//	for (int i = 0; i < n; i++) {
//		cout << window[i][1] << ' ';
//		if (i < q) {
//			ans += B[window[i][1]];
//		}
//		else {
//			ans += A[window[i][1]];
//		}
//	}
//	cout << ans << endl;
//	return 0;
//}


//#include <iostream>
//#include <algorithm>
//using namespace std;
//int A[100005], B[100005];
//int main()
//{
//	int n;  cin >> n;
//	for (int i = 0; i < n; i++) cin >> A[i];
//	for (int i = 0; i < n; i++) cin >> B[i];
//	sort(B, B + n);
//	long long ans = 0;
//	for (int i = 0; i < n; i++) {
//		int left = i, right = n - 1;
//		while (left <= right) {
//			int mid = (left + right) >> 1;
//			if (A[i] < B[mid]) {
//				right = mid - 1;
//			}
//			else {
//				left = mid + 1;
//			}
//		}
//		ans += (n - left);
//	}
//	cout << ans << endl;
//	return 0;
//}













//#include <iostream>
//#include <unordered_map>
//using namespace std;
//int A[100005];
//int mode = 1e9 + 7;
//int main()
//{
//	int N, D;  cin >> N >> D;
//	int ans = 1;
//	unordered_map<int, vector<int>> window;
//	for (int i = 0; i < N; i++) {
//		int t;  cin >> t;
//		window[t].push_back(i);
//	}
//	int l, r, n, cnt;
//	for (auto &e  : window) {
//		vector<int>& vet = e.second;
//		l = 0, r = 0, n = vet.size(), cnt = 1;
//		for (; r < n; r++) {
//			while (vet[l] + D < vet[r]) l++;
//			cnt += (r - l + 1);
//		}
//		ans = (ans * cnt) % mode;
//	}
//	ans--;
//	if (ans < 0) ans = mode - 1;
//	cout << ans << endl;
//	return 0;
//}


#include <iostream>
using namespace std;
int A[100005], B[100005];
int main()
{
	int N, T;  cin >> N >> T;
	for (int i = 0; i < N; i++)  cin >> A[i];
	for (int i = 0; i < N; i++)  cin >> B[i];

	int left = 0, right = 3600;
	auto check = [&](int maxtime) {
		int day = 0, nowtime = 0, pos = 0;
		while (day < T) {
			if (nowtime + A[pos] > maxtime) {
				nowtime = 0, day++;
			}
			else {
				nowtime += A[pos] + B[pos];
				if (nowtime > maxtime) {
					nowtime = B[pos], day++;
					if (day >= T) return false;
				}
				pos++;
				if (pos == N) {
					return true;
				}
			}
		}
		return pos == N;
	};
	while (left <= right) {
			int mid = (left + right) >> 1;
			if (check(mid)) {
				right = mid - 1;
			}
			else {
				left = mid + 1;
			}
	}
	if (left == 3601) left = -1;
	cout << left << endl;
	return 0;
}